package com.dave.gd.core.base.entity;

import java.util.List;

import com.dave.gd.core.util.RetInfo;


/**
 * 
 * 元数据的实体接口.
 * 
 * @author Luxb
 * @version Revision 1.0.0
 * @see:
 * @创建日期：2014年11月19日
 * @功能说明：
 *
 */
public interface IMetaEntity {
    
    /**
     * 获取元数据类型
     * .
     * @return
     */
    public ISysClass getModelClass();
    
    /**
     * 通过属性名获取属性规格
     * .
     * @param propertyName
     * 			属性规格的javaCode
     * @return
     */
    public IAttrSpec getAttrSpecByAttrName(String propertyName);
    
    /**
     * 通过属性名获取属性值规格
     * .
     * @param propertyName
     * 			属性规格的javaCode
     * @return
     */
    public List<IAttrValue> getAttrValuesByAttrName(String propertyName);
    
    /**
     * 获取所有的属性规格
     * .
     * @return
     */
    public List<IAttrSpec> getAllAttrSpec();
    
    /**
     * 通过属性名获取实体属性值
     * .
     * @param propertyName
     * 			属性javaCode
     * @return
     */
    public Object get(String propertyName);
    
    /**
     * 获取实体属性值
     * .
     * @param propertyId
     * 			属性规格标志
     * @return
     */
    public Object get(Long propertyId);
    
    /**
     * 设置实体属性值
     * .
     * @param propertyId
     * 			属性规格标志
     * @param value
     * 			属性值
     * @return
     * 			属性旧值
     */
    public RetInfo set(Long propertyId, Object value);
    
    /**
     * 设置实体属性值
     * .
     * @param propertyName
     * 			属性javaCode
     * @param value
     * 			属性值
     * @return
     * 			属性旧值
     */
    public RetInfo set(String propertyName, Object value);
    
    /**
     * 
     * set
     * .	
     * @param propertyId
     * 			属性规格标识
     * @param value
     * 			属性值
     * @param check
     * 			校验标识
     * @return
     * 			属性旧值
     * @date 2014/11/25
     *
     */
    public RetInfo set(Long propertyId, Object value, boolean check);

    /**
     * 
     * set
     * .	
     * @param propertyName
     * @param value
     * @param check
     * @return
     * @date 2014/11/25
     *
     */
    public RetInfo set(String propertyName, Object value, boolean check);
    
}
